/**
 * Copyright 2008 Mathias Doenitz, http://lis.to/
 *
 * This file is part of the lis.to java desktop client. The lis.to java desktop client is free software: you can
 * redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free
 * Software Foundation, either version 3 of the License, or (at your option) any later version.
 *
 * The lis.to java desktop client is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with the lis.to java desktop client.
 * If not, see http://www.gnu.org/licenses/
 */

package listo.utils.swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class CollapsiblePanel extends JPanel {
    
    public interface CollapsedStateChangedListener {
        public void collapsedStateChanged(CollapsiblePanel panel);
    }

    private JPanel contentPane;
    private final JLabel titleLabel;

    private boolean collapsed;
    private final Icon collapsedIcon;
    private final Icon expandedIcon;

    private final CollapsedStateChangedListener listener;

    public CollapsiblePanel(String title, boolean collapsed, CollapsedStateChangedListener listener, Icon expandedIcon,
                            Icon collapsedIcon) {
        super(new BorderLayout());
        this.listener = listener;
        this.collapsed = collapsed;
        this.expandedIcon = expandedIcon;
        this.collapsedIcon = collapsedIcon;

        JPanel titlePane = new JPanel(new BorderLayout());
        titleLabel = new JLabel(title);
        titleLabel.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                setCollapsed(!CollapsiblePanel.this.collapsed);
            }
        });
        titlePane.add(titleLabel, BorderLayout.CENTER);

        this.add(titlePane, BorderLayout.NORTH);
    }

    public boolean isCollapsed() {
        return collapsed;
    }

    public void setCollapsed(boolean collapsed) {
        this.collapsed = collapsed;
        titleLabel.setIcon(collapsed ? collapsedIcon : expandedIcon);
        contentPane.setVisible(!collapsed);

        if (listener != null) listener.collapsedStateChanged(this);
    }

    public void setContentPane(JPanel panel) {
        contentPane = panel;
        add(contentPane, BorderLayout.CENTER);
        setCollapsed(collapsed);
    }

    public JLabel getTitleLabel() {
        return titleLabel;
    }

}
